package com.itextpdf.text.xml.xmp; import com.itextpdf.testutils.CompareTool; import com.itextpdf.text.*; import com.itextpdf.text.pdf.*; import com.itextpdf.xmp.XMPException; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import java.io.*; public class PdfAXmpWriterTest { public static final String OUT_FOLDER = "./target/com/itextpdf/text/xml/xmp/"; public static final String CMP_FOLDER = "./src/test/resources/com/itextpdf/text/xml/xmp/"; @Before public void init() { new File(OUT_FOLDER).mkdirs(); } @Test public void createPdfTest() throws IOException, DocumentException, XMPException { String fileName = "xmp_metadata.pdf"; // step 1 Document document = new Document(); // step 2 PdfWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(OUT_FOLDER + fileName), PdfAConformanceLevel.PDF_A_2B); writer.setTagged(); writer.createXmpMetadata(); XmpWriter xmp = writer.getXmpWriter(); DublinCoreProperties.addSubject(xmp.getXmpMeta(), "Hello World"); DublinCoreProperties.addSubject(xmp.getXmpMeta(), "XMP & Metadata"); DublinCoreProperties.addSubject(xmp.getXmpMeta(), "Metadata"); PdfProperties.setKeywords(xmp.getXmpMeta(), "Hello World, XMP & Metadata, Metadata"); PdfProperties.setVersion(xmp.getXmpMeta(), "1.4"); // step 3 document.open(); document.addLanguage("en_US"); // step 4 Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); // step 5 document.close(); CompareTool ct = new CompareTool(); Assert.assertNull(ct.compareXmp(OUT_FOLDER + fileName, CMP_FOLDER + fileName, true)); } @Test public void createPdfAutomaticTest() throws IOException, DocumentException { String fileName = "xmp_metadata_automatic.pdf"; // step 1 Document document = new Document(); // step 2 PdfWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(OUT_FOLDER + fileName), PdfAConformanceLevel.PDF_A_1B); document.addTitle("Hello World example"); document.addSubject("This example shows how to add metadata & XMP"); document.addKeywords("Metadata, iText, step 3"); document.addCreator("My program using 'iText'"); document.addAuthor("Bruno Lowagie & Paulo Soares"); writer.createXmpMetadata(); // step 3 document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); // step 5 document.close(); CompareTool ct = new CompareTool(); Assert.assertNull(ct.compareXmp(OUT_FOLDER + fileName, CMP_FOLDER + fileName, true)); } @Test public void manipulatePdfTest() throws IOException, DocumentException, XMPException { String fileName = "xmp_metadata_added.pdf"; PdfReader reader = new PdfReader(CMP_FOLDER + "pdf_metadata.pdf"); PdfStamper stamper = new PdfAStamper(reader, new FileOutputStream(OUT_FOLDER + fileName), PdfAConformanceLevel.PDF_A_1A); stamper.createXmpMetadata(); XmpWriter xmp = stamper.getXmpWriter(); DublinCoreProperties.addSubject(xmp.getXmpMeta(), "Hello World"); DublinCoreProperties.addSubject(xmp.getXmpMeta(), "XMP & Metadata"); DublinCoreProperties.addSubject(xmp.getXmpMeta(), "Metadata"); PdfProperties.setVersion(xmp.getXmpMeta(), "1.4"); stamper.close(); reader.close(); CompareTool ct = new CompareTool(); Assert.assertNull(ct.compareXmp(OUT_FOLDER + fileName, CMP_FOLDER + fileName, true)); } @Test public void manipulatePdf2Test() throws IOException, DocumentException, XMPException { String fileName = "xmp_metadata_added2.pdf"; PdfReader reader = new PdfReader(CMP_FOLDER + "pdf_metadata.pdf"); PdfStamper stamper = new PdfAStamper(reader, new FileOutputStream(OUT_FOLDER + fileName), PdfAConformanceLevel.PDF_A_1A); ByteArrayOutputStream os = new ByteArrayOutputStream(); XmpWriter xmp = new PdfAXmpWriter(os, reader.getInfo(), PdfAConformanceLevel.PDF_A_1A, stamper.getWriter()); DublinCoreProperties.addSubject(xmp.getXmpMeta(), "Hello World"); DublinCoreProperties.addSubject(xmp.getXmpMeta(), "XMP & Metadata"); DublinCoreProperties.addSubject(xmp.getXmpMeta(), "Metadata"); PdfProperties.setVersion(xmp.getXmpMeta(), "1.4"); xmp.close(); stamper.setXmpMetadata(os.toByteArray()); stamper.close(); reader.close(); CompareTool ct = new CompareTool(); Assert.assertNull(ct.compareXmp(OUT_FOLDER + fileName, CMP_FOLDER + fileName, true)); } @Test public void manipulatePdfAutomaticTest() throws IOException, DocumentException, XMPException { String fileName = "xmp_metadata_updated.pdf"; PdfReader reader = new PdfReader(CMP_FOLDER + "pdf_metadata.pdf"); PdfStamper stamper = new PdfAStamper(reader, new FileOutputStream(OUT_FOLDER + fileName), PdfAConformanceLevel.PDF_A_1A); stamper.close(); reader.close(); CompareTool ct = new CompareTool(); Assert.assertNull(ct.compareXmp(OUT_FOLDER + fileName, CMP_FOLDER + fileName, true)); } @Test public void deprecatedLogicTest() throws IOException, DocumentException { String fileName = "xmp_metadata_deprecated.pdf"; // step 1 Document document = new Document(); // step 2 PdfWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(OUT_FOLDER + fileName), PdfAConformanceLevel.PDF_A_2B); ByteArrayOutputStream os = new ByteArrayOutputStream(); XmpWriter xmp = new PdfAXmpWriter(os, PdfAConformanceLevel.PDF_A_2B, writer); XmpSchema dc = new com.itextpdf.text.xml.xmp.DublinCoreSchema(); XmpArray subject = new XmpArray(XmpArray.UNORDERED); subject.add("Hello World"); subject.add("XMP & Metadata"); subject.add("Metadata"); dc.setProperty(DublinCoreSchema.SUBJECT, subject); xmp.addRdfDescription(dc.getXmlns(), dc.toString()); PdfSchema pdf = new PdfSchema(); pdf.setProperty(PdfSchema.KEYWORDS, "Hello World, XMP & Metadata, Metadata"); pdf.setProperty(PdfSchema.VERSION, "1.4"); xmp.addRdfDescription(pdf); xmp.close(); writer.setXmpMetadata(os.toByteArray()); // step 3 document.open(); document.addLanguage("en_US"); // step 4 Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); // step 5 document.close(); CompareTool ct = new CompareTool(); Assert.assertNull(ct.compareXmp(OUT_FOLDER + fileName, CMP_FOLDER + "xmp_metadata_deprecated.pdf", true)); } }